package controller;

import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.Benutzer;


/**
 * Dieses Servlet dient eingeloggten Benutzern zum Ändern der eigenen Nutzerdaten.
 */
@WebServlet({ "/BenutzerdatenAendern", "/benutzerdatenaendern", "/BenutzerdatenAendern.html", "/benutzerdatenaendern.html" })
public class BenutzerdatenAendern extends SessionControll {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public BenutzerdatenAendern() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * Liefert die HTML-Ansicht ohne Post-Wert
	 * 
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		if(super.loginPruefen(request, response)) {
			HttpSession session = request.getSession();
			String email = (String) session.getAttribute("email");
			Benutzer benutzer = benutzerRepository.getBenutzerNachEmail(email);
			request.setAttribute("benutzer", benutzer);
			
			RequestDispatcher view;
			view = request.getRequestDispatcher("BenutzerdatenAendern.jsp");
			view.forward(request, response);
		}
	}

	/**
	 * Verändert die Benutzer nach POST-Parameter
	 * 
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		HttpSession session = request.getSession();
		String email = (String) session.getAttribute("email");
		Benutzer benutzer = benutzerRepository.getBenutzerNachEmail(email);
		
		
		if(request.getParameter("email") != null) {
			benutzer.setEmail(request.getParameter("email"));
			 session.setAttribute("email", request.getParameter("email") );
			
		}
		if(request.getParameter("vorname") != null) {
			benutzer.setVorname(request.getParameter("vorname"));
		}
		if(request.getParameter("nachname") != null) {
			benutzer.setNachname(request.getParameter("nachname"));
		}
		if(request.getParameter("pw") != null) {
			try {
				benutzer.setPasswort(Benutzer.getHash(request.getParameter("pw")));
			} catch (NoSuchAlgorithmException e) {
				new helper.Logging("Fehler F030",e.toString(), benutzerRepository.getBenutzerNachEmail((String) request.getSession().getAttribute("email")), (byte)1);
				response.sendRedirect("Fehler?weiterleitung=BenutzerdatenAendern&fehler=Es gab einen Verschlüsselungs-Fehler. Bitte versuchen Sie es erneut oder kontaktieren Sie einen Administrator. (F030)");
			}
		}
		try {
			benutzerRepository.saveBenutzer(benutzer);
		} catch (SQLException e) {
			new helper.Logging("Fehler F031",e.toString(), benutzerRepository.getBenutzerNachEmail((String) request.getSession().getAttribute("email")), (byte)1);
			response.sendRedirect("Fehler?weiterleitung=BenutzerdatenAendern&fehler=Es konnte nicht auf die Datenbank zugegriffen werden! Bitte versuchen Sie es erneut oder kontaktieren Sie einen Administrator. (F031)");
		} catch (IllegalArgumentException e) {
			new helper.Logging("Fehler F032",e.toString(), benutzerRepository.getBenutzerNachEmail((String) request.getSession().getAttribute("email")), (byte)1);
			response.sendRedirect("Fehler?weiterleitung=BenutzerdatenAendern&fehler=Es konnte nicht auf die Datenbank zugegriffen werden! Bitte versuchen Sie es erneut oder kontaktieren Sie einen Administrator. (F031)");
		} catch (ClassNotFoundException e) {
			new helper.Logging("Fehler F033",e.toString(), benutzerRepository.getBenutzerNachEmail((String) request.getSession().getAttribute("email")), (byte)1);
			response.sendRedirect("Fehler?weiterleitung=BenutzerdatenAendern&fehler=Es konnte nicht auf die Datenbank zugegriffen werden! Bitte versuchen Sie es erneut oder kontaktieren Sie einen Administrator. (F031)");
		}
	}

}
